package
{
	/* VK API коннектор */
	import flash.display.Shader;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	import vk.APIConnection;
	import vk.events.CustomEvent;
	/* Мультизагрузчик */
	import br.com.stimuli.loading.BulkLoader;
	import br.com.stimuli.loading.BulkProgressEvent;
	
	/**
	 * Фрейм предзагрузки данных пользователя и игрового контента.
	 */
	public class FrPreloader extends BaseFrame 
	{
		public var VK:APIConnection;
		/* Структура загруженных с ВК данных */
		public var VKLoadedData:VKData;
		/* Структура загруженного контента */
		public var BulkData:BulkLoader;
		
		/* Флаги загрузки данных */
		private var vkLoaded:Boolean = false;
		private var bulkLoaded:Boolean = false;
		
		/* Анимация загрузки */
		private var shpLogo:Shape;
		private var txtLable:TextField;
		
		public function FrPreloader(parentFrame:BaseFrame=null) 
		{
			super(parentFrame);
			parentFrame.addChild(this);
			OpenFrame();
		}
		
		/* Инициализация */
		override public function InitFrame():void 
		{
			super.InitFrame();
			
			trace("FrPreloader>>> Инициализация");
			
			/* Инициализация графического интерфейса */
			
			/* Логотип */
			shpLogo = new Shape();
			shpLogo.graphics.beginFill(0xA0F0D2);
			shpLogo.graphics.drawRect(-13, -15, 30, 30);
			shpLogo.graphics.endFill();
			addChild(shpLogo);
			shpLogo.x = stage.stageWidth / 2;
			shpLogo.y = stage.stageHeight / 2; 
			
			/* Надпись */
			var fmtInfo:TextFormat = new TextFormat("_sans", 20, 0xFF0000, true);
			fmtInfo.align = TextFormatAlign.CENTER;
			txtLable = new TextField();
			txtLable.defaultTextFormat = fmtInfo;
			txtLable.x = stage.stageWidth / 2  - 125;
			txtLable.y = stage.stageHeight / 2 + 30;
			txtLable.width = 250;
			txtLable.text = "Загрузка...";
			addChild(txtLable);
			
			/* Компиляция связанных классов (Main) */
			
			/* Инициализация загрузчика данных с ВК */
			/* Переменные передающиеся при загрузке приложения */
			var flashVars: Object = stage.loaderInfo.parameters as Object;	
			/* Если выполняется локально */
			if (!flashVars.api_id)
			{
				flashVars['api_id'] = 2263565;
				flashVars['viewer_id'] = 1880982;
				/* sid и secret периодически меняются ВК.
				 * Значения можно посмотреть запустив тестовое приложение ВК */
				flashVars['sid'] = "1d5b39d17358fd7cecaccf6feca2fa242e9ecb7f65d3fb2882958ef227b8b2";
				flashVars['secret'] = "1b1e868d55";
			}
			//VK = new APIConnection(flashVars);
			InitVKLoader(flashVars);
		}
		
		/* Главный цикл */
		override protected function update(e:Event):void 
		{
			super.update(e);
			shpLogo.rotation+=5;
			/* Проверка на завершение загрузки */
			if (vkLoaded && bulkLoaded)
			{
				trace("FrPreloader>>> Передача управления в Main");
				ClearFrame();
				InitCloseEvent();
			}
		}
		
		/* Инициализация загрузчика VK */
		private function InitVKLoader(flashVars:Object):void
		{
			VKLoadedData = new VKData(flashVars);
			VKLoadedData.addEventListener(VKData.VKDATA_LOADED, VKDataListener);
			VKLoadedData.addEventListener(VKData.VKDATA_FAIL, VKDataListener);
		}
		
		/* Обработчик события "Данные VK загружены" */
		private function VKDataListener(e:Event):void
		{
			switch (e.type)
			{
				case VKData.VKDATA_LOADED:
					trace("FrPreloader>>> Данные VK загружены");
					vkLoaded = true;
					InitBulkLoader();
				break;
				case VKData.VKDATA_FAIL:
					vkLoaded = false;
					txtLable.text = "Ошибка загрузки с ВК";
					trace("FrPreloader>>> ошибка загрузки данных с ВК");
				break;
			}
			
			/* Отвязываем обработчики от событий загрузки VK */
			VKLoadedData.removeEventListener(VKData.VKDATA_LOADED, VKDataListener);
			VKLoadedData.removeEventListener(VKData.VKDATA_FAIL, VKDataListener);
		}
		
		/* Инициализация загрузчика Bulk Loader */
		private function InitBulkLoader():void
		{
			trace("FrPreloader>>> Инициализация загрузчика контента ");
			/* Инициализация загрузчика контента */
			BulkData = new BulkLoader("commonLoad");
			BulkData.logLevel = BulkLoader.LOG_INFO;
			BulkData.addEventListener(BulkLoader.COMPLETE, BulkDataListener_Complete);
			BulkData.addEventListener(BulkLoader.PROGRESS, BulkDataListener_Progress);
			BulkData.add(VKLoadedData.urlPhoto, {id:"photo2"});
			/* Кнопки */
			BulkData.add("http:\/\/lastgalaxy.googlecode.com\/svn\/trunk\/content\/images\/buttons\/btnUp.png",{id:"btnUp"});
			BulkData.add("http:\/\/lastgalaxy.googlecode.com\/svn\/trunk\/content\/images\/buttons\/btnOver.png",{id:"btnOver"});
			BulkData.add("http:\/\/lastgalaxy.googlecode.com\/svn\/trunk\/content\/images\/buttons\/btnDown.png",{id:"btnDown"});
			
			BulkData.start();
		}
		
		/* Обработка завершения работы Bulk Loader */
		private function BulkDataListener_Complete(e:Event): void
		{
			BulkData.removeEventListener(BulkLoader.COMPLETE, BulkDataListener_Complete);
			BulkData.removeEventListener(BulkLoader.PROGRESS, BulkDataListener_Progress);
			trace("FrPreloader>>> Контент загружен.");
			bulkLoaded = true;
		}
		
		/* Обработка процесса загрузки Bulk Loader*/
		private function BulkDataListener_Progress(e:BulkProgressEvent): void
		{
			shpLogo.rotation+=5;
		}
				
		/* Очистка контента фрейма */
		override public function ClearFrame():void 
		{
			super.ClearFrame();
			/* Удаление обработчиков событий */
		}
		
		/* Создание события закрытие фрейма */
		override public function InitCloseEvent():void 
		{
			super.InitCloseEvent();
		}
	}
}